home *** CD-ROM | disk | FTP | other *** search
/ Computer Select (Limited Edition) / Computer Select.iso / pcmag / v11n02 / math.pas < prev    next >
Pascal/Delphi Source File  |  1991-12-28  |  4KB  |  148 lines

  1. UNIT Math;
  2.  
  3. { This Unit is designed to meet the demand on
  4.   Turbo Pascal to do scientific calculations  }
  5.  
  6. (**) INTERFACE (**)
  7. TYPE
  8.   CompStr = String[2*SizeOf(Real)];
  9.   Complex = RECORD
  10.               CASE Byte OF
  11.                 0 : (S : CompStr);
  12.                 1 : (len  : Byte;
  13.                      R, I : Real);
  14.                 2 : (leng : Byte;
  15.                      Rad, Theta : Real);
  16.             END;
  17.  
  18.   FUNCTION C2S(C : Complex; w, d : Byte) : String;
  19.   FUNCTION P2S(C : Complex; w, d : Byte) : String;
  20.   FUNCTION sinh(X : Real) : Real;
  21.   FUNCTION cosh(X : Real) : Real;
  22.   FUNCTION CmpAdd(A, B : Complex)  : CompStr;
  23.   FUNCTION CmpSub(A, B : Complex)  : CompStr;
  24.   FUNCTION CmpMul(A, B : Complex)  : CompStr;
  25.   FUNCTION CmpDiv(A, B : Complex)  : CompStr;
  26.   FUNCTION CmpExp(X : Complex)  : CompStr;
  27.   FUNCTION CmpSinh(X : Complex) : CompStr;
  28.   FUNCTION CmpCosh(X : Complex) : CompStr;
  29.  
  30.   FUNCTION RecToPol(X : Complex) : CompStr;
  31.   {rectangular to polar coordinates}
  32.   FUNCTION PoltoREC(X : Complex) : CompStr;
  33.   {polar to rectangular coordinates}
  34.  
  35. (**) IMPLEMENTATION (**)
  36.   FUNCTION C2S(C : Complex; w, d : Byte) : String;
  37.   VAR RString, IString : String;
  38.   BEGIN
  39.     Str(C.R:w:d, RString);
  40.     Str(C.I:w:d, IString);
  41.     C2S := '(' + RString + ' + ' + IString + 'i)';
  42.   END;
  43.  
  44.   FUNCTION P2S(C : Complex; w, d : Byte) : String;
  45.   VAR RadString, ThetaString : String;
  46.   BEGIN
  47.     Str(C.R:w:d, RadString);
  48.     Str(C.I:w:d, ThetaString);
  49.     P2S := RadString + ' at ' +
  50.                 ThetaString + ' degrees';
  51.   END;
  52.  
  53.   FUNCTION Sinh(X : Real) : Real;
  54.   BEGIN Sinh := (Exp(X)-Exp(-X))/2; END;
  55.  
  56.   FUNCTION Cosh(X : Real) : Real;
  57.   BEGIN Cosh := (Exp(X)+Exp(-X))/2; END;
  58.  
  59.   FUNCTION CmpAdd(A, B : Complex)  : CompStr;
  60.   VAR Temp : Complex;
  61.   BEGIN
  62.     Temp.Len := 12;
  63.     Temp.R := A.R + B.R;
  64.     Temp.I := A.I + B.I;
  65.     CmpAdd := Temp.S;
  66.   END;
  67.  
  68.   FUNCTION CmpSub(A, B : Complex)  : CompStr;
  69.   VAR Temp : Complex;
  70.   BEGIN
  71.     Temp.Len := 12;
  72.     Temp.R := A.R - B.R;
  73.     Temp.I := A.I - B.I;
  74.     CmpSub := Temp.S;
  75.   END;
  76.  
  77.   FUNCTION CmpMul(A, B : Complex)  : CompStr;
  78.   VAR Temp : Complex;
  79.   BEGIN
  80.     Temp.Len := 12;
  81.     Temp.R := (A.R * B.R) - (A.I * B.I);
  82.     Temp.I := (A.R * B.I) + (B.R * A.I);
  83.     CmpMul := Temp.S;
  84.   END;
  85.  
  86.   FUNCTION CmpDiv(A, B : Complex)  : CompStr;
  87.   VAR Temp : Complex;
  88.     TempR : Real;
  89.   BEGIN
  90.     Temp.Len := 12;
  91.     TempR  := Sqr(B.R) + Sqr(B.I);
  92.     Temp.R := ((A.R * B.R) + (A.I * B.I))/TempR;
  93.     Temp.I := ((B.R * A.I) - (A.R * B.I))/TempR;
  94.     CmpDiv := Temp.S;
  95.   END;
  96.  
  97.   FUNCTION CmpExp(X : Complex) : CompStr;
  98.   VAR Temp : Complex;
  99.   BEGIN
  100.     Temp.Len := 12;
  101.     Temp.R := Exp(X.R) * Cos(X.I);
  102.     Temp.I := Exp(X.R) * Sin(X.I);
  103.     CmpExp := Temp.S;
  104.   END;
  105.  
  106.   FUNCTION CmpSinh(X : Complex) : CompStr;
  107.   VAR Temp : Complex;
  108.   BEGIN
  109.     Temp.Len := 12;
  110.     Temp.R := Sinh(X.R) * Cos(X.I);
  111.     Temp.I := Cosh(X.R) * Sin(X.I);
  112.     CmpSinh := Temp.S;
  113.   END;
  114.  
  115.   FUNCTION CmpCosh(X : Complex) : CompStr;
  116.   VAR Temp : Complex;
  117.   BEGIN
  118.     Temp.Len := 12;
  119.     Temp.R := Cosh(X.R) * Cos(X.I);
  120.     Temp.I := Sinh(X.R) * Sin(X.I);
  121.     CmpCosh := Temp.S;
  122.   END;
  123.  
  124.   FUNCTION RECtoPol(X : Complex) : CompStr;
  125.   VAR Temp : Complex;
  126.   BEGIN
  127.     Temp.Rad := Sqrt(Sqr(X.R) + Sqr(X.I));
  128.     IF Abs(X.R) > 0 THEN
  129.       Temp.Theta := ArcTan(X.I/X.R) * 180/pi
  130.     ELSE Temp.Theta := 90;
  131.     IF (X.R <= 0) THEN
  132.       BEGIN
  133.         IF (X.I < 0) THEN Temp.theta := Temp.theta - 180
  134.         ELSE Temp.theta := Temp.theta + 180;
  135.       END;
  136.     RecToPol := Temp.S;
  137.   END;
  138.  
  139.   FUNCTION PoltoREC(X : Complex) : CompStr;
  140.   VAR Temp : Complex;
  141.   BEGIN
  142.     Temp.R := X.Rad * Cos(X.Theta * pi/180);
  143.     Temp.I := X.Rad * Sin(X.Theta * pi/180);
  144.     PolToRec := Temp.S;
  145.   END;
  146.  
  147. END.
  148.